Exercices

LocalStorage Weather Api ToDo et LocalStorage

React+ionic

Ionic Create project 4.React Outils utiles 5.Lifecycle Methods 6.JSX

Gestion Ventes

Produit CRUD

6.Form :Ajouter un produit 8.Liste produits 9.Pagination 10.Liste produits +Pagination 11.Liste produits +Datatable 11.Liste produits +load more 12.Supprimer un produit 14.Details d'un produit 15.Recherche et Autocomplete

Reacts:Utils

Gestion des erreurs Variables d'environment Cookies Internationalization proptypes Form validation React Animation Fragment Google Maps

Utilisateur CRUD

18.Inscription upload file 19.Connexion et Les sessions 19.Connexion: JWT Token

Ventes CRUD

17.Vendre un produit 18.Facture Generate PDF 19.Statisques Charts

Redux





Exercices

folder Projet: test_react_project

Créer une application React Permettant d'ajouter des items dans localStorage puis augmenter au diminuer le nombre d'occurence ainsi que selectionnée et désélectionner un item

App.js
import React from 'react'
import {useState, useEffect} from 'react'

function App() {
  //permet d'ajouter ou supprimer un item
  const [item , setItem]= useState({ itemName:"", quantite:1, itemStyle:{ textDecoration: "none"}})
  //sauvegarer les items à gérés
  const [items , setItems] = useState([])
 
  //chager les items from localStorage
  useEffect(() => {
    console.log(items);
    //si l'objet mydata n'exsite pas on le crée dans le LocalStorage
    if (localStorage.getItem("mydata") === null) {
      localStorage.setItem("mydata", "[]");
    }else{
      // si l'objet mydata exsite dans localStorage on le charge
      let tb = JSON.parse(localStorage.getItem("mydata"))
      setItems(tb)
    }
  }, []);
 
 
  //pour le nombre d'occurences de toutes les items
  let total = 0
  //add new item
  const handlChange = (e)=>{
    setItem((oldValue) => ({
      ...oldValue,
      //id sera automatiquement égale le nombre d'objet dans mydata
      id: JSON.parse(localStorage.getItem("mydata")).length,
      itemName: e.target.value,
    }));
  }
 
 
 
  const addItems = (e)=>{
    //eviter le charement du la page car on utilise <form ..submit
    e.preventDefault()
    //si le nom est rempli on l'ajoute dans la liste items et
    //on le sauvegarde dans le LocalStorage
    if(item.itemName !== ""){
      let table = JSON.parse(localStorage.getItem("mydata"));
      table.push(item);
      localStorage.setItem("mydata", JSON.stringify(table));
      setItems(table);
    }
   
  }
 
  //incrémenter le nombre d'occurence d'un item donnée avec son id
  const increasing = (id)=>{
    let newTb = items.map((obj) => {
      if (obj.id === id) {
        //...obj=>old item
        //puis on change l'attribut quantite
        return { ...obj, quantite: obj.quantite + 1 };
      }
      return obj;
    });
   
    // save the new table
    localStorage.setItem("mydata", JSON.stringify(newTb));
    setItems(newTb);
  }
 
  const decreasing = (id)=>{
    let newTb = items.map((obj) => {
      if (obj.id === id) {
        if(obj.quantite>0)
        return { ...obj, quantite: obj.quantite - 1 };
      }
      return obj;
    });
    localStorage.setItem("mydata", JSON.stringify(newTb));
    setItems(newTb);
    console.log(newTb)
  }
 
  //lorsque un item is selected on ajoute un style
  const selectionner= (id)=>{
    let newTbl = items.map((obj) => {
      //changer le style de l'objet sélectionné
      if (obj.id === id) {
        if(obj.itemStyle.textDecoration=='none')
        {
        return { ...obj, itemStyle:{ textDecoration: "line-through"} };
        }
        else
        {
          return { ...obj, itemStyle:{ textDecoration: "none"} };

        }
      }
      return obj;
    });
   
    localStorage.setItem("mydata", JSON.stringify(newTbl));
    setItems(newTbl)
   
  }
 
  return (
    <div>
    <form action="">
    <table style={{width:'100%'}}>
    <tr>
    <td>
    <input type="text" className="form-control" placeholder="item name... " onChange={handlChange} value={item.itemName}  style={{width:'100%'}}/>
    </td>
    <td>
    <button onClick={addItems}>Add  </button>
    </td>
    </tr>
   
    </table>
    </form>
    <div>
    {
      items.length ?(
        <div>
       
        {
          items.map((elem)=>{
            total += elem.quantite
            return (
             <div style={{float:'left',width:'100%',marginBottom:'7px',background:'#eee'}}>
              <div style={{float:'left',width:'20%',cursor:'pointer'}}>
              <div style={elem.itemStyle} onClick={()=>selectionner(elem.id)} >
              {elem.itemName}
              </div>
              </div>
              <div style={{float:'left',width:'20%'}}><button  onClick={()=>decreasing(elem.id)}>&lt;</button>
              </div>
             
              <div style={{float:'left',width:'20%'}}>
              <b> {elem.quantite}</b>
              </div>
              <div style={{float:'left',width:'20%'}}>
                   <button className='btn btn-light' onClick={()=>increasing(elem.id)}>&gt;</button>
              </div>
             </div>
             
             
             
              )}
              )}
              <div style={{background:'#000',color:'red',float:'left',width:'100%'}}>
              Total: {total}
              </div>
              </div>
              ):(
                <div>Rien à affiché</div>
                )
              }
              </div>
              </div>
             
             
              );
            }
           
            export default App